package com.lambda;

import javax.print.DocFlavor;
import java.util.function.*;

/**
 * 在Java中,函数式接口是只包含一个抽象方法的接口,它们是支持Lambda表达式的基础,因为Lambda表达式需要一个目标类型,这个目标类型必须是一个函数式接口
 *      函数式接口的出入参定义
 *          有入参,有出参
 *          有入参,没出参
 *          无入参,无出参
 *
 *
 */
public class Lambda05 {

    public static void main(String[] args) {
        //定义数据的提供者
        Supplier<String> supplier = () -> {
            return "42";
        };
        //获取值
        String string = supplier.get();
        System.out.println(string);

        //断言: 验证string是否是一个数字
        Predicate<String> isNumber = (String str) ->{
            return str.matches("\\d+");
        };
        boolean res = isNumber.test(string);
        System.out.println(res);

        //转换  将获取到字符串的值转换为数字

        Integer integer = 0;
        if (res){
            Function<String, Integer> change = (String str) ->{
                return Integer.parseInt(str);
            };

            integer = change.apply(string);
            System.out.println(integer);

        }

        //消费者: 打印数字
        Consumer<Integer> consumer = (Integer getInteger) -> {
            System.out.println(getInteger);
        };

        consumer.accept(integer);

    }
}
